package com.rise.serialportdemo.led;

import android.util.Log;

import com.rise.serialportdemo.cmd4000.utils.Logs;

import java.util.Arrays;

import kc.lg101.jnilib;

/**
 * LED指示灯
 */
public class LedUtils {

    private jnilib jni;
    private int iST;
    //出参，LED 灯状态数组
    private int[] iLedArr = new int[16];
    //出参，LED 走马灯状态数组
    private int[] iTkLedArr = new int[16];

    static {
        System.loadLibrary("lg101");
    }

    public LedUtils() {
        jni = new jnilib();
    }

    /**
     * 打开通讯端口
     *
     * @return
     */
    public boolean BnOpenPort() {
        //串口号
        String comm = "/dev/ttyS1";
        try {
            iST = jni.OpenPort(comm, 9600);
            if (iST == 0) {
                Logs.v("LED灯打开成功");
                return true;
            } else {
                return false;
            }
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 关闭通讯端口
     */
    public boolean BnClosePort() {
        iST = jni.ClosePort();
        if (iST == 0) {
            Logs.v("LED灯关闭成功");
            return true;
        } else {
            return false;
        }
    }

    /**
     * 控制 LED 灯点亮或是关闭
     *
     * 2是打印机  1是入钞口  3是出钞口
     *
     * @param iLed   （0,1,2,3…15,16）,（0=全部 LED）
     * @param iOnOff 1=点亮, 0=关闭
     * @param iOnTm  点亮时间（10ms） 范围 1~255
     * @param iOffTm 关闭时间（10ms）
     */
    public boolean BnCtrlLed(int iLed, int iOnOff, int iOnTm, int iOffTm) {
        iST = jni.ControlLED(iLed, iOnOff, iOnTm, iOffTm);
        if (iST == 0) {
            Logs.v("LED点亮");
            return true;
        } else {
            return false;
        }
    }

    /**
     * 读取 LED 灯 状态
     */
    public void BnReadLed() {

        String sLedArr="", sTkLedArr="";

        iST = jni.ReadLEDST(iLedArr, iTkLedArr);
        if (iST == 0) {
            for (int i = 0; i < 16; i++) {
                iLedArr[i] = (iLedArr[i]) == 0 ? 0 : 1;
                iTkLedArr[i] = (iTkLedArr[i]) == 0 ? 0 : 1;

                sLedArr += Integer.toString(iLedArr[i]);
                sTkLedArr += Integer.toString(iTkLedArr[i]);

            }

            Log.v("MainActivity",Arrays.toString(iLedArr)+"");
            Log.v("MainActivity",Arrays.toString(iTkLedArr)+"");

            Log.v("MainActivity",sLedArr+"=sLedArr");
            Log.v("MainActivity",sTkLedArr+"=sTkLedArr");
        }
    }

    /**
     * 设置 LED 走马灯 模式
     *
     * @return
     */
    public boolean BnSetTwinkle() {
        iST = jni.SetTwinkle(iTkLedArr, 10, 10);
        if (iST == 0) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 启动设置
     * @return
     */
    public boolean BnBootSet() {
        iST = jni.SetBoot(iLedArr, iTkLedArr, 10, 10);
        if (iST == 0) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 复位重置
     * @return
     */
    public boolean BnReSet(){
        iST = jni.Reset();
        if (iST == 0) {
            Logs.v("LED复位重置");
            return true;
        }
        else{
            return false;
        }
    }
}
